#include <stdint.h>
#include <stdio.h>
#include <sys/eventfd.h>
#include <unistd.h>

int main()
{
    // 在系统内核中它就是一个计数器,由于比较简单,所以效率很高
    int efd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK);  // 0 -> 计数器的初始值   EFD_CLOEXEC -> 不可拷贝
    if (efd < 0)
    {
        perror("eventfd failed!");
        return -1;
    }

    uint64_t val = 1;
    write(efd, &val, sizeof(val));
    write(efd, &val, sizeof(val));
    write(efd, &val, sizeof(val));
    write(efd, &val, sizeof(val));
    uint64_t res = 0;
    read(efd, &res, sizeof(res));
    printf("%ld\n", res);
    close(efd);
    return 0;
}
